1. Field of the Invention
The present invention relates to peripheral device controllers, and more particularly, to controllers used in a universal serial bus (“USB”) system.
2. Background
The USB system provides a unitary interface that allows various devices to be connected to a computer system (also referred to as a host system). USB enables a wide variety of peripherals to be connected in a tree-like fashion through a physical connector at the host side. USB systems comply with the USB specification, version 2.0, published Apr. 27, 2000, which is incorporated herein by reference in its entirety.
USB systems are implemented by a register level interface standard referred to as the “Open Host Controller Interface (“OHCI”), developed by a consortium of computer industry manufacturers. The OHCI allows multiple Host Controllers to be used with a common software driver. The OHCI specification, version 1.0a, entitled “Open HCI Host Controller Interface Specification for USB, published by Compaq, Microsoft, and National Semiconductor, Jan. 22, 1997, is incorporated herein by reference in its entirety.
Yet another standard that is used by USB systems is the Universal Host Controller Interface (“UHCI”) that implements a USB Host Controller. The UHCI provides hardware and software interface between a Host Controller software driver and the Host Controller. UHCI standard published by Intel Corporation, Revision 1.1, March 1996, is incorporated herein by reference in its entirety.
USB enables bi-directional isochronous and asynchronous data transfer making it possible to couple plural peripheral devices to a computing device via a single Host Controller and a USB hub. A USB hub is an intelligent wiring connector, coupled to a computing device or another hub, and which allows, attachment for peripheral devices.
USB systems allow automatic identification and configuration of external and/or internal peripheral devices. Typically, a USB host controller maintains a data structure that identifies every connected peripheral device and includes entries for communicating with the individual devices. The data structure manages four types of data transfers, between a host controller and peripheral units, namely, interrupt, isochronous, control and bulk transfers.
Interrupt transfers include small data transfers used to communicate information from a USB device to a client software at the host system. Isochronous transfers include periodic data transfers at a constant rate. Data transfer is correlated in time between a sender and receiver.
Control transfers are non-periodic data transfers used to communicate configuration/command/status information between client software and a USB device. Bulk transfers are non-periodic data transfers used to transfer large amounts of information between client software and a USB device.
USB systems use a microcontroller (also referred to as a host controller or USB controller), or an embedded microcontroller, uniquely suited on to a monolithic semiconductor substrate (chip) to interface between host systems and USB devices. The USB controller includes various features within a single chip, complying with the foregoing standards.
USB systems use Endpoint Descriptors (ED) and Transfer Descriptors (TD) for communication. Typically, a Host Controller Driver assigns an ED to each peripheral device (also referred to herein as an “endpoint”) in the USB system. The ED includes information necessary for the host controller to communicate with the endpoint. The fields include maximum packet size, endpoint address, and speed of the endpoint and direction of data flow. A queue of TDs is linked to the ED for a specific endpoint. The TD includes information necessary to describe the data packets to be transferred. Each TD contains information that describes one or more data packets.
Section 4 of the OHCI specification describes the use of endpoint and transfer descriptors. Typically, a ED is a 16-byte, memory resident structure. A host controller traverses lists of EDs and if there are TDs linked to an ED, the host controller performs the indicated transfer.
Current USB controllers have various drawbacks. For example for bulk transfers, a host system builds a bulk transfer list structure in system memory which includes EDs and TDs. Under OHCI's bulk list structure, a host controller must queue and en-queue EDs and TDs depending upon whether they are active or inactive.
If Host Controller has to send bulk data, host controller must access the ED in system memory, compute the ED, access the TD, compute the TD and then transfer data according to the command. This requires elaborate bus mastering which is complex and slows the host system.
For isochronous transfer, conventional OHCI controllers require frequent access to the system bus. Isochronous transfer monopolizes system bus resources and hence overall system performance is affected.
Another drawback of conventional USB systems is that memory buffers are either under-run or over-run, and hence used inefficiently.
Therefore, there is a need for a host controller that allows efficient data transfer without monopolizing system bus resources.
There is also a need for an ED and TD format that does not require elaborate and complex bus mastering.
Also, there is a need for a buffering mechanism that efficiently utilizes the buffer resources.